Для просмотра списков объектов информационной базы, таких как элементы справочника, элементы планов видов характеристик, видов расчета, планов обмена, а также для просмотра списков записей регистров предназначены специальные объекты системы 1С:Предприятие. Это объекты с названиями вида СправочникСписок.<ИмяСправочника>, РегистрСведенийСписок.<ИмяРегистраСведений> и т.д. Такие объекты могут выступать источниками данных для для табличных полей в формах (свойство "Данные" объекта ТабличноеПоле). Важной особенностью таких объектов является то, что они имеют возможность при просмотре информационной базы считывать данные «порциями», достаточными для отображения данных в табличном поле. Поэтому такие списки можно назвать списками динамического просмотра данных - каждая очередная порция данных отображает актуальное состояние списка объектов (записей регистра). Эта особенность дает возможность пользователю даже в случае больших списков данных работать относительно комфортно. При открытии формы со списком не возникает задержки, при переходе в конец списка нет необходимости считывания всех отображаемых в нем данных и т.д.
Описанное выше поведение (считывание данных порциями для отображения в табличном поле) неявно зависит от конечного пользователя. Дело в том, что для эффективной работы механизма динамического просмотра данных система использует индексы тех таблиц, содержимое которых отображается. В том случае, если ни один из индексов таблицы не соответствует заданному пользователем упорядочиванию, механизм динамического просмотра не будет задействован, и из информационной базы будут считываться сразу все данные, которые потенциально могут быть отображены в списке (разумеется, с учетом установленных пользователем условий отбора). Следовательно, в том случае, если при работе с большим списком пользователь установил неоптимальные настройки упорядочивания и не ограничил условия отбора в списке или установил "мягкие" условия отбора (под которые подпадает большое число записей таблицы), будут возникать "задержки" при работе пользователя:
Следует заметить, что условия отбора (объект Отбор) также могут отрабатываться системой относительно быстро или медленно в зависимости от того, какие условия и на какие поля заданы. Неоптимальная установка условий отбора может привести к тому, что даже при использовании механизма динамического просмотра данных (т.е. при считывании данных из информационной базы относительно небольшими "порциями") будут возникать задержки при просмотре такого списка, связанные с выполнением условий отбора.
По умолчанию система использует такое упорядочивание, которое позволяет использовать механизм динамического просмотра данных. Упорядочивание по умолчанию для разных прикладных объектов системы приведено в таблице.
Прикладной объект | Упорядочивание |
---|---|
Справочник с иерархией, свойство "группы сверху" установлено | ЭтоГруппа + Код или ЭтоГруппа + Наименование в зависимости от основного представления объекта и наличия свойств Код и Наименование |
Справочник без иерархии или свойство "группы сверху" не установлено | Код или Наименование в зависимости от основного представления объекта и наличия свойств Код и Наименование |
Документ (журнал документов) | Дата |
План видов характеристик | Код или наименование в зависимости от основного представления объекта |
План счетов | Код или наименование в зависимости от основного представления объекта |
План видов расчета | Код или Наименование в зависимости от основного представления объекта и наличия свойств Код и Наименование |
План обмена | Код или наименование в зависимости от основного представления объекта |
Регистр сведений периодический | Период |
Регистр сведений непериодический | Список всех измерений, в той последовательности, в которой они сконфигурированы |
Регистр накопления | Период |
Регистр бухгалтерии | Период |
Регистр расчета | ПериодРегистрации |
Бизнес-процесс | Дата |
Задача | Дата |
В приведенной таблице - видимое пользователю упорядочивание, которое можно увидеть, например, в диалоге "Отбор и сортировка". Это упорядочивание дополняется системой по правилам изложенным в следующем разделе.
При работе с упорядочиванием списков следует помнить, что важным является не только выбор тех или иных полей упорядочивания, но и их комбинация и последовательность. Например, для справочников оптимальным является как упорядочивание по коду, так и упорядочивание по наименованию, но упорядочивание и по коду и по наименованию одновременно не может быть эффективным и приведет к "отключению" механизма динамического просмотра данных.
При работе со списками динамического просмотра следует учитывать то, что система неявным образом дополняет упорядочивание, установленное разработчиком прикладных решений или пользователем. Это делается для того, что бы избежать неоднозначности в упорядочивании объектов. Это касается также и упорядочивания по умолчанию, приведенного в таблице. Например, при упорядочивании справочника по полю Наименование система дополнит упорядочивание полем Ссылка, что позволит избежать неоднозначности при упорядочивании элементов справочника с одинаковыми наименованиями.
Ниже приведены правила по которым система дополняет упорядочивание, установленное пользователем или разработчиком прикладного решения.
К списку упорядочивания, если это необходимо, прибавляется упорядочивание по полю Ссылка.
К списку упорядочивания, независимо от того, является ли регистр подчиненным регистратору или нет, прибавляется упорядочивание по полю Период и всем измерениям в той последовательности, в которой они сконфигурированы, если эти поля не заданы в списке упорядочивания.
К списку упорядочивания, независимо от того, является ли регистр подчиненным регистратору или нет, прибавляется упорядочивание по всем измерениям в той последовательности, в которой они сконфигурированы, если эти поля не заданы в списке упорядочивания.
К списку упорядочивания прибавляется упорядочивание по ссылке на регистратор и номеру строки. Следует отметить, что система дополняет список упорядочивания именно упорядочиванием по ссылке на регистратор. Это не то же самое, что упорядочивание по полю Регистратор, которое может быть выбрано пользователем в окне "Отбор и сортировка". При выборе поля Регистратор пользователем (или при установке такого порядка разработчиком прикладного решения) результат будет совсем другой - будет выполнено упорядочивание по регистраторам в порядке их даты и, кроме того, такое упорядочивание не может быть эффективным (механизм динамического просмотра списков не будет задействован). Любое упорядочивание по полям не базовых типов приводит к неэффективности упорядочивания, что описано ниже.
Для любых прикладных объектов невозможно упорядочивание по следующим полям:
"Набор типов" в приведенном выше списке - это:
При этом можно наблюдать следующее поведение. Если при конфигурировании в таблице задано поле с типом ПеречислениеСсылка (т.е. ссылка на любое перечисление), то упорядочивание по такому полю невозможно, пока в конфигурации нет ни одного перечисления. Если в конфигурации создать одно перечисление, то упорядочивание по такому полю будет доступно, так как, не смотря на то, что для поля задан "набор типов", он в текущем состоянии конфигурации представляет собой ссылку на конкретное (единственное) перечисление. Если в конфигурации создать еще одно перечисление, то упорядочивание по такому полю будет недоступно, так как "набор типов" в таком состоянии конфигурации представляет собой составной тип данных.
Если в качестве типа задан Характеристика.<Имя плана видов характеристик>, то упорядочивание по такому полю невозможно в не зависимости от состава типов, назначенного соответствующему плану видов характеристик.
Для ограничения интерактивного управления упорядочиванием, которое может выполнять конечный пользователь в диалоге "Отбор и сортировка", служит объект НастройкаПорядка (см. свойство НастройкаПорядка объекта ТабличноеПоле).
Общим положением для всех списков является то, что если в списке полей упорядочивания присутствует поле, которое не является полем базового типа, то применение механизма динамического просмотра данных невозможно. Это связано с тем, что при упорядочивании, например, регистра сведений по полю типа СправочникСсылка.Склады, упорядочивание будет выполнятся по полю Наименование или Код (т.е. полю основного представления), которое находится в таблице справочника складов, а не в таблице регистра сведений.
Еще одной общей для всех прикладных объектов особенностью является то, что для всех полей упорядочивания должно быть задано одинаковое направление сортировки - возрастание или убывание. Если хоть для одного из полей упорядочивания это значение не совпадает с остальными, применение механизма динамического просмотра данных невозможно.
Ниже для всех прикладных объектов описаны оптимальные настройки упорядочивания.
Оптимальными являются:
Если у объекта есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать", то оптимальными также являются:
Важно, что в данном случае упорядочивание по полям Реквизит1 + Код или Реквизит1 + Наименование не является эффективным.
Если у объекта есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать с доп. упорядочиванием", то оптимальными также являются:
Важно, что в данном случае упорядочивание только по полю Реквизит1 не является эффективным.
При отображении справочников и планов видов характеристик в режиме "Иерархический просмотр" оптимальными являются:
Если у объекта есть реквизит "Реквизит1" базового типа для которого свойство Индексирование установлено в значение "Индексировать", то оптимальными также являются:
Если у объекта есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать с доп. упорядочиванием", то оптимальными также являются:
При неиерархическом отображении справочников и планов видов характеристик список оптимальными являются случаи описанные для неиерархических прикладных объектов.
Важно, что для объектов с иерархией групп и элементов упорядочивание только по полю ЭтоГруппа в любом случае не является эффективным.
Оптимальными являются:
Если у документа есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать", то оптимальными также являются:
Если у документа есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать с доп. упорядочиванием", то оптимальными также являются:
Важно, что в этом случае упорядочивание только по полю Реквизит1 не является эффективным.
Оптимальным является:
Если у журнала документов есть графа "Графа1" для которой свойство Индексирование установлено в значение "Индексировать", то оптимальными также является упорядочивание по графе Графа1.
Если у журнала документов есть графа "Графа1" для которой свойство Индексирование установлено в значение "Индексировать с доп. упорядочиванием", то оптимальными также является упорядочивание по полям Графа1 + Дата. Важно, что в этом случае упорядочивание только по полю Графа1 не является эффективным.
Для периодического регистра сведений, в независимости от того, подчинен он регистратору или нет, оптимальными являются следующие комбинации полей упорядочивания:
Необходимо отметить, что в первых двух случаях из вышеперечисленных будет получено одно и то же упорядочивание Период + <Список всех измерений>. Это произойдет потому, что система дополнит упорядочивание, установленное пользователем или разработчиком прикладного решения, по описанным выше правилам.
Приведем пример.
Пусть есть регистр сведений с 2-мя измерениями базового типа Измерение1 и Измерение2. Тогда оптимальными будут следующие комбинации полей упорядочивания:
Неоптимальными будут, например:
Если у регистра есть измерение, ресурс или реквизит для которого задано индексирование, то для такого поля (допустим с именем "Поле1") оптимальными также являются:
В обоих описанных случаях упорядочивание даст одинаковый результат, а упорядочивание по полям Поле1 + <Список измерений> не будет эффективным.
Для непериодического регистра сведений все приведенные соображения также имеют место с той лишь поправкой, что у него нет поля Период и таким образом список оптимальных способов упорядочивания сводится к следующему:
Оптимальным являются только:
Если у регистра есть измерение или реквизит для которого задано индексирование, то для такого поля (допустим с именем "Поле1") оптимальными также является:
Оптимальными для регистра расчета будут следующие комбинации:
Рассмотрим на примере.
Пусть имеется регистра расчета с измерениями Измерение1, Измерение2 и Измерение3 и при этом Измерение1 и Измерение3 являются "базовыми". Тогда оптимальными будут, например, следующие комбинации полей упорядочивания:
А приведенные ниже комбинации оптимальными не будут:
Для регистра расчета также могут индексироваться измерения и реквизиты и для таких полей также появляются дополнительные оптимальные комбинации полей упорядочивания:
Важно то, что для всех регистров упорядочивание по полю Регистратор не может быть оптимальным на том общем основании, которое приведено выше. Более того, зачастую поле Регистратор для регистров имеет составной тип, который неявно задается при настройке движений документов (см. свойство "Движения"), что исключает любое упорядочивание по полю Регистратор.
Оптимальными являются:
Если у бизнес-процесса есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать", то оптимальными также являются:
Если у бизнес-процесса есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать с доп. упорядочиванием", то оптимальными также являются:
Важно, что в этом случае упорядочивание только по полю Реквизит1 не является эффективным.
Оптимальными являются:
Если у задачи есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать", то оптимальными также являются:
Если у задачи есть реквизит "Реквизит1" для которого свойство Индексирование установлено в значение "Индексировать с доп. упорядочиванием", то оптимальными также являются:
Важно, что в этом случае упорядочивание только по полю Реквизит1 не является эффективным.
В общем случае на эффективность работы списка влияет не только настройка упорядочивания (свойство "Порядок"), но и настройка условий отбора (свойство "Отбор"). В общем случае правильно сформировать список оптимальных условий упорядочивания можно на основании комбинации настроек Отбора и Порядка. Те условия которые устанавливают отбор на "равно", т.е. с использованием варианта сравнения Равно, должны учитываться при анализе оптимальности упорядочивания. Если на поле таблицы "Поле1" (это касается всех рассмотренных нами случаев) установлено условие отбора на "равно", то присутствие этого поля в списке упорядочивания можно игнорировать. Разумеется, что это касается только случая, когда для Поле1 установлено упорядочивание в том же направлении, что и для остальных полей.
Рассмотрим пример.
Пусть у справочника есть Реквизит1 и Реквизит2, при этом Реквизит1 "индексирован с доп. упорядочиванием". Тогда упорядочивание по полям Реквизит1 + Реквизит2 + Наименование в общем случае не будет эффективным. Но если в отборе будет установлено условие на "равно" для Реквизит2, то такое упорядочивание будет эффективным.
Материал данного раздела позволяет сделать вывод, что широкие возможности по настройке упорядочивания списков и условий отбора данных налагают на конечного пользователя ответственность за получение конечного результата. Причем, неэффективное управление списками динамического просмотра может привести не только к снижению эффективности работы самого пользователя, но и к снижению эффективности работы системы в целом. Правильная настройка списков становится особенно важной в сочетании с возможностью их автоматического обновления. Если пользователь установит необходимость автоматического обновления списка для которого выбраны неоптимальные настройки порядка и/или отбора, это потребует значительных ресурсов системы и, как следствие, приведет к неэффективности ее работы в целом.